namespace Digitalmes.Application.Mes.Reworks.Doc;

/// <summary>
/// 产品返工信息 DTO 对象。
/// </summary>
public sealed class ReworkDocDto : Dto
{
    /// <summary>
    /// 零件码
    /// </summary>
    public string? Sn { get; set; }

    /// <summary>
    /// 产品 Id。
    /// </summary>
    public long ProductId { get; set; }

    /// <summary>
    /// 产品编码
    /// </summary>
    public string? ProductCode { get; set; }

    /// <summary>
    /// 关联原生产工单
    /// </summary>
    public string? Wo { get; set; }

    /// <summary>
    /// 返工模式（在线/离线）
    /// </summary>
    public ReworkModeEnum ReworkMode { get; set; }

    /// <summary>
    /// 返工产线 Id
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 产品NG的工序 Id。
    /// </summary>
    public long NgOperationId { get; set; }

    /// <summary>
    /// 产品NG的工序编号。
    /// </summary>
    [NotNull]
    public string? NgOperationCode { get; set; }

    /// <summary>
    /// 产品NG的工位 Id。
    /// </summary>
    public long NgWorkstationId { get; set; }

    /// <summary>
    /// 产品NG的工位编号。
    /// </summary>
    [NotNull]
    public string? NgWorkstationCode { get; set; }

    /// <summary>
    /// 返工后需重新进入的工序 Id（为 0 表示产品直接下线）。
    /// </summary>
    public long TargetOperationId { get; set; }

    /// <summary>
    /// 返工后需重新进入的工序编号（未设定时为空）。
    /// </summary>
    public string? TargetOperationCode { get; set; }

    /// <summary>
    /// 返工状态
    /// </summary>
    public ReworkStatusEnum Status { get; set; }

    public string? StatusDesc => Status.Description();

    /// <summary>
    /// 返工结果（1->合格；2->不合格；3->报废）
    /// </summary>
    public ReworkResultEnum Result { get; set; }

    public string? ResultDesc => Result.Description();

    /// <summary>
    /// 操作人员。
    /// </summary>
    public string? Operator { get; set; }

    /// <summary>
    /// 备注。
    /// </summary>
    public string? Remark { get; set; }

    /// <summary>
    /// 返工开始时间。
    /// </summary>
    public DateTime? StartTime { get; set; }

    /// <summary>
    /// 返工完成时间。
    /// </summary>
    public DateTime? EndTime { get; set; }

    /// <summary>
    /// 返工缺陷集合。
    /// </summary>
    public List<ReworkDefectDto>? Defects { get; set; }
}
